﻿namespace Nomo.FiniteStateMachineModule
{
    /// <summary>
    /// 状态。
    /// </summary>
    public interface IState
    {
        /// <summary>
        /// ID .
        /// </summary>
        int ID { get; }

        /// <summary>
        /// 进入时。
        /// </summary>
        void OnEnter();

        /// <summary>
        /// 退出时。
        /// </summary>
        void OnExit();

        /// <summary>
        /// 切换状态。
        /// </summary>
        /// <param name="id">如果允许切换状态，它的值为下个状态的 ID ；否则为 <see cref="int"/> 的默认值。</param>
        /// <returns>如果允许切换状态，返回 <see langword="true"/> ，否则返回 <see langword="false"/> .</returns>
        bool Switch(out int id);

        /// <summary>
        /// 更新时。
        /// </summary>
        void OnUpdate();
    }
}
